home *** CD-ROM | disk | FTP | other *** search
- { >pas.testrandom }
- program testrandom(output);
-
- const
- OS_ReadMonotonicTime = 66;
- R0 = 0;
-
- var
- loopcount : integer;
- starttime : integer;
-
- function readtime : integer;
-
- var
- timeslot : integer;
- begin
- *SWI_OS_ReadMonotonicTime;
- *STR_R0,timeslot;
- readtime := timeslot
- end; {readtime}
-
- function random : integer;
-
- static seed : integer;
- static done : boolean := false;
-
- const
- mult = 109; { mult will need changing if modulus is increased }
- incr = 853;
- modulus = 8192;
-
- begin
- if not done
- then
- begin
- seed := readtime;
- done := true
- end;
- { this ensures that we have an unknown start }
- seed := (mult * seed + incr) mod modulus;
- random := seed;
- seed := seed + readtime
- { this ensures that the sequence changes }
- end; { random }
-
- begin
- starttime := readtime;
- for loopcount := 1 to 100 do
- writeln('The number now is ',random:4,' on try ',loopcount:3,' after ',(readtime-starttime)/100:6:3,' seconds.')
- end.
-